//-------------------------------------------------------------------------------------------------------
//      Copyright (c) 2005, Be Nanashi-San 
// 
//      Permission is hereby granted, free of charge, to any person obtaining a 
//      copy of this software and associated documentation files (the "Software"), 
//      to deal in the Software without restriction, including without limitation 
//      the rights to use, copy, modify, merge, publish, distribute, sublicense, 
//      and/or sell copies of the Software, and to permit persons to whom the 
//      Software is furnished to do so, subject to the following conditions: 
// 
//      The above copyright notice and this permission notice shall be included in 
//      all copies or substantial portions of the Software. 
// 
//      THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
//      IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
//      FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
//      AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
//      LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
//      FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
//      DEALINGS IN THE SOFTWARE. 
// 
//      File Name:   	Cashe.cpp
//      Author:      	Be Nanashi-San
//
//		Description:	スレ表示用キャッシュ
//-------------------------------------------------------------------------------------------------------
#include "Cashe.h"
#include "K2chTextView.h"
#include "K2chTipTextView.h"
#include "MUtils.h"

TextRunArray::TextRunArray(size_t entries)
	:
	fNumEntries(entries)
{
	fArray = (text_run_array *)malloc(sizeof(int32) + sizeof(text_run) * entries);
	if (fArray != NULL)
		fArray->count = 0;
}


TextRunArray::~TextRunArray()
{
	free(fArray);
}

////////////////////////////////////////////////////////////////////////////////
// Cashe
//
//
////////////////////////////////////////////////////////////////////////////////
Cashe::Cashe()
{
	fBufferLength = 2048;
	fStyleBufferLength = 100;
	fBuf = (char *)malloc(fBufferLength);
	fRunArray = new TextRunArray(fStyleBufferLength);
	this->Init();
}
////////////////////////////////////////////////////////////////////////////////
// ~Cashe
//
//
////////////////////////////////////////////////////////////////////////////////
Cashe::~Cashe()
{
	free(fBuf);
	delete fRunArray;
}
////////////////////////////////////////////////////////////////////////////////
// 
//
//
////////////////////////////////////////////////////////////////////////////////
void
Cashe::Init()
{
	fBuf[0] = 0;
	fLength = 0;
	(fRunArray->Array()).count = 0;
	fStyleLength = 0;
}
////////////////////////////////////////////////////////////////////////////////
// 
//
//
////////////////////////////////////////////////////////////////////////////////
void
Cashe::Insert(char *text, MStyle *style)
{
	this->Insert(text, strlen(text), style);
}
////////////////////////////////////////////////////////////////////////////////
// 
//
//
////////////////////////////////////////////////////////////////////////////////
void
Cashe::Insert(char *text, int32 length, MStyle *style)
{
	//String too long
	if(length >= fBufferLength){
	//Flush();
	//view->Insert();
	}
	
	if(fLength + length >= fBufferLength || fStyleLength + 1 >= fStyleBufferLength){
	//Flush();
	}
	
	memcpy(fBuf + fLength, text, length);
	fLength += length;
	//fStyle()

}
////////////////////////////////////////////////////////////////////////////////
// 
//
//
////////////////////////////////////////////////////////////////////////////////
void
Cashe::Flash(K2chTextView *outView)
{
if(!fLength) return;
//	outView->Insert()
this->Init();
}
